package com.tutorial.demo4stream;

import java.util.HashMap;
import java.util.Map;

/**
 * @author xiaoxiaokui
 * @description: JDK 8 中对 map 提供了一些其他新特性
 * @date 2019/10/30
 **/
public class Demo4MapNewCharacteristic {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            // 与老版不同的是，putIfAbent() 方法在 put 之前，
            // 会判断 key 是否已经存在，存在则直接返回 value, 否则 put, 再返回 value
            map.putIfAbsent(i, "val" + i);
        }
        // forEach 可以很方便地对 map 进行遍历操作
        map.forEach((key, value) -> System.out.println(value));

        // computeIfPresent(), 当 key 存在时，才会做相关处理
        // 如下：对 key 为 3 的值，内部会先判断值是否存在，
        // 存在，则做 value + key 的拼接操作
        map.computeIfPresent(3, (num, val) -> val + num);
        System.out.println(map.get(3));

        // 先判断 key 为 9 的元素是否存在，存在，则做删除操作
        map.computeIfPresent(9, (num, val) -> null);
        System.out.println(map.containsKey(9));

        // computeIfAbsent(), 当 key 不存在时，才会做相关处理
        // 如下：先判断 key 为 23 的元素是否存在，不存在，则添加
        map.computeIfAbsent(23, num -> "val" + num);
        System.out.println(map.containsKey(23));

    }
}
